import * as SecureStore from "expo-secure-store";

// User ID 存储的键
const userIdStoreKey = "current_user_id";

// 内存缓存，避免每次都从 SecureStore 读取
let cachedUserId: string | null = null;

/**
 * 当前用户ID管理类
 */
class CurrentUserIdManager {
  /**
   * 设置当前用户ID
   * @param userId 用户ID
   */
  setUserId(userId: string): void {
    console.log("设置用户ID:", userId);
    cachedUserId = userId; // 更新缓存
    SecureStore.setItem(userIdStoreKey, userId);
  }

  /**
   * 获取当前用户ID
   * 同步返回用户ID，优先使用内存缓存
   */
  getUserId(): string | null {
    if (cachedUserId) {
      return cachedUserId; // 如果缓存中有，直接返回
    } else {
        return this.loadUserId();
    }
  }

  /**
   * 异步获取当前用户ID
   * 从 SecureStore 读取并更新缓存
   */
   loadUserId(): string {
    try {
      const userId = SecureStore.getItem(userIdStoreKey);
      cachedUserId = userId;
      return userId;
    } catch (error) {
      console.error("加载用户ID失败:", error);
      return null;
    }
  }

  /**
   * 清除当前用户ID
   */
  async clearUserId(): Promise<void> {
    console.log("清除用户ID");
    cachedUserId = null;
    await SecureStore.deleteItemAsync(userIdStoreKey);
  }
}

// 返回一个 CurrentUserIdManager 实例以供使用
export default new CurrentUserIdManager();
